import logging
import os
import time

from config.setting import LOG_PATH


class ErrorLog(object):
    """封装错误日志"""

    def __init__(self, logger=None):
        """
            指定保存日志的文件路径，日志级别，以及调用文件
            将日志存入到指定的文件中
        """
        # 创建一个logger
        self.logger = logging.getLogger(logger)
        # logger最长用的操作有两类：配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象
        self.logger.setLevel(logging.DEBUG)  # 默认日志级别是DEBUG
        self.log_time = time.strftime("%Y_%m_%d_")
        self.log_path = LOG_PATH
        self.log_name = self.log_time + 'app.log'
        """日志输出到logs文件"""
        fh = logging.FileHandler(filename=os.path.join(self.log_path,
                                                       self.log_name), encoding='utf-8')
        fh.setLevel(logging.DEBUG)
        """日志输出到控制台console"""
        ch = logging.StreamHandler()
        # 定义一个StreamHandler,logging.StreamHandler:日志输出到流
        # 定义一个StreamHandler，将INFO级别或更高的日志信息打印到标准错误，并将其添加到当前的日志处理对象
        ch.setLevel(logging.DEBUG)
        """指定日志记录输出的具体格式"""
        formatter = logging.Formatter(
            '[%(asctime)s] %(filename)s->%(funcName)s line:%(lineno)d [%(levelname)s]%(message)s')

        # 将定义好的输出形式添加到handler
        fh.setFormatter(formatter)  # Formatter 对象用于把一个LogRecord对象转换成文本，它定义了日志的格式、结构
        ch.setFormatter(formatter)

        # 给logging添加handler
        self.logger.addHandler(fh)
        self.logger.addHandler(ch)

        fh.close()
        ch.close()

    def get_log(self):
        return self.logger
